package com.itheima.service.impl;

import com.itheima.data.Customer;
import com.itheima.service.customexception.InformationNullPointer;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Calendar;

/**
 * 业务层
 * 信用评估系统
 */

public class CreditScoringModel {
    public int calculateCreditScore(Customer customer) throws InformationNullPointer {
        if (customer==null){
            throw  new InformationNullPointer("未查询到客户信息");
        }
        // 根据客户的个人信息和财务数据计算信用评分
        int score = 0;
        // 实现具体的评分模型算法
        //1.根据年龄加分 18-25 加10分 25-35 加20 35-45加30 45-55 加40 55以上加30
        try {
            score += judgeAge(customer.getAge());
        } catch (InformationNullPointer e) {
            System.out.println(e.getMessage());
        }
        //2.根据性别加分   男性加10分，女性不加分
        try {
            score += judgeSex(customer.getGender());
        } catch (InformationNullPointer e) {
            System.out.println(e.getMessage());
        }
        //3.根据婚姻状况加分   结婚加10分，未婚不加分
        score += judgeMaritalStatus(customer.isMaritalStatus());
        //4.根据教育水平加分  本科+10分 研究生+20  博士 +30,其它不加分
        try {
            score += judgeEducation(customer.getEducation());
        } catch (InformationNullPointer e) {
            System.out.println(e.getMessage());
        }
        //5.根据信用卡使用年限加分  1年以上10分，3年以上20分  5年以上30分
        try {
            score += judgeCreditCardCreateTime(customer.getCreditCardCreateTime());
        } catch (InformationNullPointer e) {
            System.out.println(e.getMessage());
        }
        //6.根据负债情况加分  无负债+10分
        score += judgeDebt(customer.getDebt());
        // 返回计算得到的信用评分
        return score;
    }

    /**
     * 根据年龄加分 18-25 加10分 25-35 加20 35-45加30 45-55 加40 55以上加30
     *
     * @param age
     * @return
     */
    public int judgeAge(int age) throws InformationNullPointer {
        if (0== age) {
            throw  new InformationNullPointer("未查询到年龄");
        }
        int score = 0;
        if (age >= 18 && age < 25) {
            score = 10;
        } else if (age >= 25 && age < 35) {
            score = 20;
        } else if (age >= 35 && age < 45) {
            score = 30;
        } else if (age >= 45 && age < 55) {
            score = 40;
        } else if (age >= 55) {
            score = 30;
        } else {
            score = 0;
        }
        return score;
    }

    /**
     * 根据性别加分   男性加10分，女性不加分
     *
     * @param sex
     * @return
     */
    public int judgeSex(String sex) throws InformationNullPointer {
        if (sex == null) {
           throw  new InformationNullPointer("未查询到性别");
        }
        int score = 0;
        if (!sex.equals("女")) {
            score = 10;
        }
        return score;
    }

    /**
     * 根据婚姻状况加分   结婚加10分，未婚不加分
     *
     * @param maritalStatus
     * @return
     */
    public int judgeMaritalStatus(boolean maritalStatus) {
        int score = 0;
        if (maritalStatus = true) {
            score = 10;
        }
        return score;
    }

    /**
     * 根据教育水平加分  本科+10分 研究生+20  博士 +30,其它不加分
     *
     * @param education
     * @return
     */
    public int judgeEducation(String education) throws InformationNullPointer {
        if (education == null) {
            throw  new InformationNullPointer("未查询到学历信息");
        }
        int score = 0;
        if (education.equals("本科")) {
            score = 10;
        } else if (education.equals("研究生")) {
            score = 20;
        } else if (education.equals("博士")) {
            score = 30;
        } else {
            score = 0;
        }
        return score;
    }

    /**
     * 根据信用卡使用年限加分  1年以上10分，3年以上20分  5年以上30分
     * @param creditCardCreateTime
     * @return
     */
    public int judgeCreditCardCreateTime(LocalDateTime creditCardCreateTime) throws InformationNullPointer {
        if (creditCardCreateTime == null) {
            throw  new InformationNullPointer("为查询到信用卡使用信息");
        }
        SimpleDateFormat simpleDateFormat =
                new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");

        int score = 0;
        LocalDateTime startTime = creditCardCreateTime;
        LocalDateTime nowTime = LocalDateTime.now();

        String creatTime = startTime.toString();
        String endTime = nowTime.toString();

  /*      try {
            long creat = simpleDateFormat.parse(creatTime).getTime();
            long end = simpleDateFormat.parse(endTime).getTime();
            long l = end - creat;
            long year = l / (1000 * 60 * 60 * 24 * 365);

            if (year<3&&year<=1){
                score+=10;
            }else if (year>=3&&year<5){
                score+=20;
            }else if (year>=5){
                score+=30;
            }
                return score;
        } catch (ParseException e) {
            e.printStackTrace();
        }*/
        return 0;
    }

    /**
     * 根据负债情况加分  无负债+10分
     *
     * @param debt
     * @return
     */
    public int judgeDebt(double debt) {

        int score = 0;
        if (debt == 0) {
            score = 10;
        }
        return score;
    }


}
